#define TAM_PAQUETE 1024

#include "red_protocolo.h"
#include "JuegoClientImp.h"
#include "ClientSideParser.h"

using namespace Glib;

namespace red {
namespace protocolo {

Protocolo::Protocolo(Socket *p_pSocket, JuegoClientImp* juego) :
	m_pSocket(p_pSocket) {
	this->juego = juego;
}

Protocolo::~Protocolo() {
}

bool Protocolo::bEnviarMensaje(IMsgSal *p_pMsgSal) {
	return bEnviarPaquete(p_pMsgSal->getPaquete());
}

bool Protocolo::bRecibirMensaje() {

	string t_sPaquete;
	bool t_b = true;


	while (t_b) {

		ClientSideParser clientSideParser(this->juego,jugador);
		t_sPaquete = "";
		t_b = this->bRecibirPaquete(t_sPaquete);
		
		clientSideParser.parse_chunk(t_sPaquete);
	}

	return t_b;
}

bool Protocolo::bEnviarPaquete(const string &p_sBuffer) {

	unsigned int t_wCantTotalProc = 0;
	bool t_b = false;

	if (!this->m_pSocket->getUtilizable()) {
	} else if (!this->m_pSocket->send(p_sBuffer, t_wCantTotalProc)) {
	} else if (t_wCantTotalProc < p_sBuffer.length()) {
	} else {
		t_b = true;
	}

	return t_b;
}

bool Protocolo::bRecibirPaquete(string &p_sPaquete) {

	unsigned int t_wCantProc = 0;
	bool t_b = false;

	p_sPaquete = "";

	if (!this->m_pSocket->getUtilizable()) {
	} else {
		t_b = this->m_pSocket->recv(p_sPaquete, TAM_PAQUETE, t_wCantProc);
	}

	return t_b;
}

}
}
